package visao;

import conexao.ConectEvent;
import controle.MasterControl;
import java.awt.event.ActionListener;
import java.awt.event.WindowListener;
import javax.swing.event.MenuListener;
import util.Constantes;

public final class SadGUI_Serv extends javax.swing.JFrame implements Teste {
// Instancia da classe SuporteEventos responsavel observar as ações e disparar os eventos
    SuporteEventos suporteEventos = new SuporteEventos(this);
    MasterControl c;

    public SadGUI_Serv(MasterControl c) {
        initComponents();
        addOuvintes();
        this.c =c;
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jToolBar1 = new javax.swing.JToolBar();
        btProfessor = new javax.swing.JButton();
        btDisciplina = new javax.swing.JButton();
        btArqDisc = new javax.swing.JButton();
        btArqProf = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        infoMSG = new javax.swing.JTextArea();
        jMenuBar1 = new javax.swing.JMenuBar();
        conexao = new javax.swing.JMenu();
        novaConexao = new javax.swing.JMenuItem();
        fecharConexao = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        sair = new javax.swing.JMenuItem();
        editar = new javax.swing.JMenu();
        preferencias = new javax.swing.JMenuItem();
        sobre = new javax.swing.JMenu();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Sistema de Geração de Provas");

        jToolBar1.setRollover(true);
        jToolBar1.setAutoscrolls(true);

        btProfessor.setActionCommand("Novo Professor");
        btProfessor.setFocusable(false);
        btProfessor.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btProfessor.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(btProfessor);

        btDisciplina.setActionCommand("Nova Disciplina");
        btDisciplina.setEnabled(false);
        btDisciplina.setFocusable(false);
        btDisciplina.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btDisciplina.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(btDisciplina);

        btArqDisc.setActionCommand("Relatorio Disciplina");
        btArqDisc.setFocusable(false);
        btArqDisc.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btArqDisc.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(btArqDisc);

        btArqProf.setActionCommand("Relatorio Professor");
        btArqProf.setFocusable(false);
        btArqProf.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        btArqProf.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        jToolBar1.add(btArqProf);

        jScrollPane1.setEnabled(false);

        infoMSG.setColumns(20);
        infoMSG.setEditable(false);
        infoMSG.setRows(5);
        jScrollPane1.setViewportView(infoMSG);

        conexao.setText("Conexão");

        novaConexao.setText("Iniciar ...");
        novaConexao.setActionCommand("Nova Conexao");
        novaConexao.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                teste(evt);
            }
        });
        conexao.add(novaConexao);

        fecharConexao.setText("Fechar...");
        fecharConexao.setActionCommand("Fechar");
        conexao.add(fecharConexao);
        conexao.add(jSeparator1);

        sair.setText("Sair");
        conexao.add(sair);

        jMenuBar1.add(conexao);

        editar.setText("Editar");

        preferencias.setText("Preferências");
        preferencias.setActionCommand("Preferencias");
        editar.add(preferencias);

        jMenuBar1.add(editar);

        sobre.setText("Sobre");
        jMenuBar1.add(sobre);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 330, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 310, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 209, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

  private void teste(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_teste
    // TODO add your handling code here:
 //   c.
  }//GEN-LAST:event_teste
//Não era para existir esses JDialogs (cadAvaliacao, cadDisciplina, cadProfessor, cadQuestao
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btArqDisc;
    private javax.swing.JButton btArqProf;
    private javax.swing.JButton btDisciplina;
    private javax.swing.JButton btProfessor;
    private javax.swing.JMenu conexao;
    private javax.swing.JMenu editar;
    private javax.swing.JMenuItem fecharConexao;
    private javax.swing.JTextArea infoMSG;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JMenuItem novaConexao;
    private javax.swing.JMenuItem preferencias;
    private javax.swing.JMenuItem sair;
    private javax.swing.JMenu sobre;
    // End of variables declaration//GEN-END:variables

    @Override
    public void addOuvintes() {
        /*Para executar qualquer evento no formulario,
          é preciso add os ouvintes, abaixo cada objeto que ira disparar algum evento
          executa o metodo addActionListener que faz com que o objeto suporteEventos,
          instanciado no inicio desta classe, possa ficar escutando as ações deste objeto*/
        preferencias.addActionListener(suporteEventos);
        novaConexao.addActionListener(suporteEventos);
        fecharConexao.addActionListener(suporteEventos);
        sair.addActionListener(suporteEventos);
        btProfessor.addActionListener(suporteEventos);
        btDisciplina.addActionListener(suporteEventos);
        btArqDisc.addActionListener(suporteEventos);
        btArqProf.addActionListener(suporteEventos);
        // para que o obj suporteEventos escute a ação da janele em si, é executado o metodo abaixo
        this.addWindowListener(suporteEventos);
        // para que o obj suporteEventos escute a ação dos menus, é executado o metodo abaixo
        sobre.addMenuListener(suporteEventos);
    }
   // kra isso aqui ta me parencendo redundancia!!! são necessários para 
    @Override
    public void addActionListener(ActionListener l) {
        suporteEventos.addActionOuvinte(l);
    }

    @Override
    public void addWindowOuvinte(WindowListener l){
        suporteEventos.addWindowOuvinte(l);
    }

    public void addMenuOuvinte(MenuListener aThis) {
        suporteEventos.addMenuOuvinte(aThis);
    }

    @Override
    public void removeActionListener(ActionListener l) {
        
    }

    @Override
    public void modelConectChange(ConectEvent evt) {
        switch(evt.getID()){
           case ConectEvent.CONECTADO:
                infoMSG.append(evt.getMSG()+"\n");
                break;
           case ConectEvent.ERRO_CONEXAO:
                desabilitarMenu(evt.getSource().toString());
                break;
        }
    }

    @Override
    public void setEditableDados(Object[] d) {
        
    }

    @Override
    public void close() {
        System.exit(0);
    }

    public void enableMenu(String menu) {
        if(menu.equals(Constantes.SAIR)){
            editar.setEnabled(true);
            btDisciplina.setEnabled(true);
        }
    }
    public void desabilitarMenu(String menu){
        if (menu.equals(Constantes.SAIR)) {
            editar.setEnabled(false);
            btDisciplina.setEnabled(false);
        }
    }
}
/*Considerações Finais
 Essa classe cria um objeto chamado suporteEventos para ficar escutando tanto essa classe
 como as demais. Mas para que o suporteEventos fique escutanto ele precisa executar o 
 metodo addActionListener, porem no decorrer da pagina, pelo o que eu percebi ocorre
 tipo uma redundancia na utilização dos metodos, ou então eu n entendi direito!!!
 Mas pelo q eu entendi, da p enxugar essa classe e torna-la mais compreensivel!!!*/